package com.gosling.cloudspace.tools;

import cn.hutool.captcha.*;
import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
import cn.hutool.core.lang.Console;

/**
 * 验证码工具类.
 *
 * @author lihonglin
 * @date 2022/4/15 16:17
 */
public class CaptchaTool extends CaptchaUtil{

    public static void main(String[] args) {
        //写出到浏览器（Servlet输出）
        ICaptcha captcha = circleCaptcha();
        //captcha.write(response.getOutputStream());

        // 自定义纯数字的验证码（随机4位数字，可重复）
        RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4);
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
        lineCaptcha.setGenerator(randomGenerator);
        // 重新生成code
        lineCaptcha.createCode();
        ShearCaptcha shearCaptcha = CaptchaUtil.createShearCaptcha(200, 45, 4, 4);
        // 自定义验证码内容为四则运算方式
        shearCaptcha.setGenerator(new MathGenerator());
        // 重新生成code
        shearCaptcha.createCode();
    }

    /***
     * 圆圈干扰验证码
     * @return
     */
    public static CircleCaptcha circleCaptcha() {
        //定义图形验证码的长、宽、验证码字符数、干扰元素个数
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
        //CircleCaptcha captcha = new CircleCaptcha(200, 100, 4, 20);
        //图形验证码写出，可以写出到文件，也可以写出到流
        circleCaptcha.write("d:/circle.png");
        //验证图形验证码的有效性，返回boolean值
        circleCaptcha.verify("1234");
        return circleCaptcha;
    }

    /***
     * 线段干扰的验证码
     * @return
     */
    public static LineCaptcha lineCaptcha() {
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
        //图形验证码写出，可以写出到文件，也可以写出到流
        lineCaptcha.write("d:/line.png");
        //输出code
        Console.log(lineCaptcha.getCode());
        //验证图形验证码的有效性，返回boolean值
        lineCaptcha.verify("1234");

        //重新生成验证码
        lineCaptcha.createCode();
        lineCaptcha.write("d:/line.png");
        //新的验证码
        Console.log(lineCaptcha.getCode());
        //验证图形验证码的有效性，返回boolean值
        lineCaptcha.verify("1234");
        return lineCaptcha;
    }

    /***
     * 扭曲干扰验证码
     * @return
     */
    public static ShearCaptcha shearCaptcha() {
        //定义图形验证码的长、宽、验证码字符数、干扰线宽度
        ShearCaptcha shearCaptcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
        //ShearCaptcha captcha = new ShearCaptcha(200, 100, 4, 4);
        //图形验证码写出，可以写出到文件，也可以写出到流
        shearCaptcha.write("d:/shear.png");
        //验证图形验证码的有效性，返回boolean值
        shearCaptcha.verify("1234");
        return shearCaptcha;
    }
}
